package main

import "fmt"

func init() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("init:", err)
		}
	}()
	panic("init panic")
}

func main() {
	demo1()
	demo2()
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("main:", err)
		}
	}()
}

// 第一次panic
func demo1() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("demo1:", err)
		}
	}()

	defer func() {
		panic("第一次panic")
	}()
	defer func() {
		panic("第二次panic")
	}()
	panic("正文")
}

// 补货不到go中的panic
func demo2() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("demo2:", err)
		}
	}()
	go demo2Do()
}

func demo2Do() {
	panic("demo2Do: panic")

	fmt.Println("demo2Do 正文。")
}
